Analiza dotyczy parametrów samochodów osobowych, wystawionych na sprzedaż za pośrednictwem portalu internetowego otomoto.pl z okolic Lublina (w promieniu 50 km).
Informacje o samochodach zostały pobrane ze strony za pomocą osobnego skryptu napisanego w R (październik 2022):
otomoto_scraping.R (Opis działania skryptu)
Analiza parametrów samochodów osobowych może obejmować wiele różnych czynników zależnych od preferencji konkretnego klienta. Przykłady parametrów, które mogą być brane pod uwagę, to m.in. moc silnika, pojemność skokowa, rodzaj paliwa, wielkość i typ nadwozia, wyposażenie, przestronność wnętrza, bezpieczeństwo i wygodę. Parametry te mogą być również porównywane między różnymi modelami samochodów, aby uzyskać informacje na temat ich wydajności, jakości i kosztów eksploatacji. Analiza parametrów samochodów osobowych może być używana do określenia najlepszej oferty cenowej w stosunku do określonych wymagań klienta.
Zbiór danych zawiera następujące parametry:
id - wybrany przez nas indywidualny numer pojazdu
Marka_pojazdu
Model_pojazdu
Rok_produkcji
Przebieg - liczba przejechanych kilometrów
Pojemność skokowa:
gdzie:
\(d\) - średnica cylindra
\(s\) - skok tłoka
\(n\) - liczba cylindów
Rodzaj_paliwa:
Samochody osobowe mogą pracować na różnych rodzajach paliw. Najbardziej popularnyme dla samochodów osobowych to benzyna, diesel, gaz ziemny, napęd hybrydowy i energia elektryczna.
Benzyna jest paliwem zawierającym zwykle około 85% węglowodorów i jest używana do napędzania większości samochodów osobowych. Jest to jedno z najtańszych paliw dostępnych na rynku, a do tego jest łatwo dostępne. Jednakże jest ona również bardzo szkodliwa dla środowiska, ponieważ wytwarza duże ilości dwutlenku węgla, tlenków azotu i innych zanieczyszczeń.
Diesel to aktualnie najpopularniejszy rdzaj paliw stosowanych w samochodach osobowych. Paliwo to jest wysoce wydajne i ekonomiczne, dlatego zyskuje popularność wśród tych, którzy szukają oszczędności. W porównaniu z benzyną, diesel wytwarza więcej tlenków azotu i innych zanieczyszczeń, które są szkodliwe dla środowiska.
Gaz ziemny (LPG) jest jednym z najbardziej ekonomicznych paliw stosowanych w samochodach osobowych. Wytwarzany z naturalnych i odnawialnych źródeł, takich jak metan i węgiel. Jego wytwarzanie wytwarza mniej dwutlenku węgla i innych zanieczyszczeń niż benzyna lub diesel.
Napęd hybrydowy jest połączeniem benzyny i energii elektrycznej. Samochody hybrydowe wykorzystują silnik spalinowy do napędzania samochodu, ale również wykorzystują silnik elektryczny, aby wspierać pracę silnika spalinowego i zwiększyć wydajność.
Energia elektryczna jest coraz popularniejszym paliwem w samochodach osobowych. Samochody elektryczne nie wytwarzają żadnych szkodliwych zanieczyszczeń, co czyni je znacznie przyjazniejszymi dla środowiska. Są zazwyczaj droższe od samochodów zpalinowych, a także mają mniejszy zasięg. Problematyczna może okazać się również wymiana i utylizacja zużytej baterii.
Moc:
Parametr wyrażony w koniach mechanicznych (KM), oznaczający pracę, jaką jest w stanie wykonać silnik w określonym czasie. Im wyższa jest moc, tym krótszy będzie czas potrzebny do np. rozpędzenia auta. Maksimum wynika z momentu obrotowego oraz prędkości obrotowej silnika i również jest osiągana w określonych warunkach, przeważnie w górnej skali obrotów.
Typ_nadwozia:
Typy nadwozia samochodów osobowych obejmują:
Sedan: Najbardziej popularny typ samochodu osobowego, charakteryzujący się czterema drzwiami i kontuarem.
Kombi: Samochód osobowy z drzwiami tylnymi i konturem. W porównaniu z nadwoziem typu sedan zwiększoną pojemność bagażnika. Jest to wygodny wybór dla osób, które często transportują duże ilości bagażu.
Hatchback(auta miejskie): Zazwyczaj ma cztery drzwi, kontur i szerokie tylne siedzenia.
Coupe: składa się z dwóch lub trzech drzwi z zazwyczaj zmniejszoną liczbą siedzeń w porównaniu z tradycyjnym sedanem. Charakteryzuje się długim, płaskim dachem i zazwyczaj zwężonym tyłem. Coupe zazwyczaj występuje w wersji sportowej i oferuje wyższą wydajność i więcej mocy niż sedan.
Kabriolet: Samochód osobowy z dachem składanym. Jest to wybór idealny dla osób, które chcą cieszyć się jazdą na otwartym powietrzu.
SUV: Składa się z czterech drzwi, dwóch lub trzech rzędów siedzeń, a także zazwyczaj znacznie większego przestrzeni bagażowej niż w zwykłym sedanie. SUV-y często mają wyższy prześwit niż sedan, co pozwala im na wjazd w tereny trudniej dostępne. SUV-y są zazwyczaj bardziej wytrzymałe i mają większą moc niż zwykłe samochody osobowe.
Minivan: Samochód osobowy z dużą przestrzenią w kabinie, który jest idealny dla rodzin z dziećmi.
Kompakt: Mały samochód osobowy z dużym bagażnikiem, który jest wyposażony w cztery drzwi i kontur. Jest to idealny wybór dla osób, które szukają oszczędności paliwa i mniejszych rozmiarów.
Auta małe: Bardzo mały samochód osobowy, który jest wyposażony w dwie lub cztery drzwi i kontur. Jest to wybór idealny dla osób, które szukają oszczędności paliwa i mniejszych rozmiarów.
Kolor
Kolor samochodu może być jednym z ważniejszych wyznaczników jego wyglądu. Odcień lakieru może wpływać na to, jak samochód jest postrzegany przez innych. Niektórzy uważają, że kolor samochodu może nawet wpływać na to, jak czują się za jego kierownicą.
Kolory samochodów są często związane z określonymi osobowościami. Na przykład, czerwony jest postrzegany jako kolor ekscytujący i dynamiczny, a czarny jest postrzegany jako kolor luksusowy i elegancki.
Cena
library(rio)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ purrr::%||%() masks base::%||%()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(knitr)
library(ggcorrplot)
autka <- import(file="otomoto.csv")
head(autka)|>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Volkswagen | Polo | 2008 | 181 000 km | 1 390 cm3 | Benzyna | 80 KM | Auta miejskie | Czarny | 15999 |
| 2 | Kia | Ceed | 2008 | 179 000 km | 1 582 cm3 | Diesel | 115 KM | Kombi | Szary | 13500 |
| 3 | Toyota | Land Cruiser | 2022 | 2 000 km | 2 755 cm3 | Diesel | 204 KM | SUV | Beżowy | 287000 |
| 4 | Fiat | 500X | 2015 | 89 024 km | 1 368 cm3 | Benzyna | 140 KM | Auta miejskie | Inny kolor | 62730 |
| 5 | Toyota | Prius | 2009 | 289 820 km | 1 798 cm3 | Hybryda | 99 KM | Kompakt | Szary | 40500 |
| 6 | Ford | S-Max | 2007 | 345 000 km | 1 753 cm3 | Diesel | 125 KM | Minivan | Srebrny | 17600 |
Jeżeli w procesie pobierania danych ze strony, jakiś parametr nie został wczytany, wtedy w jego miejsce zostaje zapisana wartość następnego parametru. Oznacza to, że w przypadku pojawienia się braków, ostatnia kolumna (Cena) będzie przyjmować wartość “NA”.
autka[is.na(autka$Cena)==T,] |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 585 | 585 | Renault | Zoe | 2017 | 60 000 km | Elektryczny | 40 KM | Kompakt | Biały | 21900 | NA |
| 1000 | 1000 | Mercedes-Benz | EQC | 2022 | Elektryczny | 408 KM | SUV | Szary | 391288 | NA | NA |
| 1001 | 1001 | Mercedes-Benz | EQS | 2022 | Elektryczny | 523 KM | Kompakt | Czarny | 783564 | NA | NA |
Braki pojawiają się dla samochodów o indeksach: 585, 1000, oraz 1001. Uwagę przykuwa fakt, że są to wyłącznie samochody elektryczne. Sprawdzmy więc dodatkowo, czy to wszystkie samochody elektryczne z bazy.
elektryczne <- NULL
for(i in 1:dim(autka)[1]){
for(j in 1:dim(autka)[2]){
if(is.na(autka[i,j])==F) {
if(autka[i,j]=="Elektryczny") {
elektryczne <- append(elektryczne,i)
}
}
}
}
autka[elektryczne,] |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 585 | 585 | Renault | Zoe | 2017 | 60 000 km | Elektryczny | 40 KM | Kompakt | Biały | 21900 | NA |
| 1000 | 1000 | Mercedes-Benz | EQC | 2022 | Elektryczny | 408 KM | SUV | Szary | 391288 | NA | NA |
| 1001 | 1001 | Mercedes-Benz | EQS | 2022 | Elektryczny | 523 KM | Kompakt | Czarny | 783564 | NA | NA |
Zgadza się. Tylko samochody elektryczne generują problemy z wczytywaniem danych, ponieważ nie posiadają takiego parametru jak Pojemość skokowa (przypiszmy im więc wartość 0). Dodatkowo, dla samochodów o indeksach 1000 oraz 1001 nie został wczytany parametr przebieg, może to być spowodowane tym, że są to nowe samochody, które nie przejechały jeszcze żadnej trasy. W tym przypadku również przypisujemy 0. Rodzaj paliwa uzupełniamy jako Elektryczny, a pozostałe wartości parametrów umieszczamy we właściwych kolumnach.
autka[elektryczne[1],7:11] <- autka[elektryczne[1],6:10]
autka[elektryczne[2:3],7:11] <- autka[elektryczne[2:3],5:9]
autka[elektryczne[2:3],5] <- 0
autka[elektryczne[1:3],6] <- 0
autka[elektryczne,] |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 585 | 585 | Renault | Zoe | 2017 | 60 000 km | 0 | Elektryczny | 40 KM | Kompakt | Biały | 21900 |
| 1000 | 1000 | Mercedes-Benz | EQC | 2022 | 0 | 0 | Elektryczny | 408 KM | SUV | Szary | 391288 |
| 1001 | 1001 | Mercedes-Benz | EQS | 2022 | 0 | 0 | Elektryczny | 523 KM | Kompakt | Czarny | 783564 |
Tworzymy ramkę danych z poprawionej bazy danych:
autka_dt <- data.frame(autka)
colSums(is.na(autka_dt))
## id Marka_pojazdu Model_pojazdu Rok_produkcji
## 0 0 0 0
## Przebieg Pojemność_skokowa Rodzaj_paliwa Moc
## 0 0 0 0
## Typ_nadwozia Kolor Cena
## 0 0 0
Pozbądźmy się na wstępie ewentualnych duplikatów
autka_dt <- autka_dt[!duplicated(autka_dt),]
summary(autka_dt)
## id Marka_pojazdu Model_pojazdu Rok_produkcji
## Min. : 1.0 Length:1248 Length:1248 Min. :1961
## 1st Qu.: 312.8 Class :character Class :character 1st Qu.:2007
## Median : 624.5 Mode :character Mode :character Median :2012
## Mean : 624.5 Mean :2011
## 3rd Qu.: 936.2 3rd Qu.:2016
## Max. :1248.0 Max. :2023
## Przebieg Pojemność_skokowa Rodzaj_paliwa Moc
## Length:1248 Length:1248 Length:1248 Length:1248
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Typ_nadwozia Kolor Cena
## Length:1248 Length:1248 Length:1248
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
Parametry: Marka_pojazdu, Model pojazdu, Rodzaj, Paliwa, Typ_nadwozia oraz Kolor ustawiamy na typ kategoryczny (factor).
autka_dt$Marka_pojazdu <- as.factor(autka$Marka_pojazdu)
autka_dt$Model_pojazdu <- as.factor(autka$Model_pojazdu)
autka_dt$Kolor <- as.factor(autka$Kolor)
autka_dt$Typ_nadwozia <- as.factor(autka$Typ_nadwozia)
autka_dt$Rodzaj_paliwa <- as.factor(autka$Rodzaj_paliwa)
Parametry takie jak: Przebieg,Pojemnosc,skokowa,Moc oraz Cena ustawiamy jako typ ilościowy (numeric).
autka_dt$Przebieg <- parse_number(gsub(" ","",autka_dt$Przebieg))
autka_dt$Pojemność_skokowa<- parse_number(gsub(" ","",autka_dt$Pojemność_skokowa))
autka_dt$Moc <- parse_number(gsub(" ","",autka_dt$Moc))
autka_dt$Cena <- parse_number(gsub(" ","",autka_dt$Cena))
summary(autka_dt)
## id Marka_pojazdu Model_pojazdu Rok_produkcji
## Min. : 1.0 BMW :108 A4 : 30 Min. :1961
## 1st Qu.: 312.8 Audi : 96 Seria 3: 29 1st Qu.:2007
## Median : 624.5 Volvo : 85 Seria 5: 24 Median :2012
## Mean : 624.5 Volkswagen: 81 Passat : 22 Mean :2011
## 3rd Qu.: 936.2 Opel : 80 Focus : 21 3rd Qu.:2016
## Max. :1248.0 Renault : 80 Megane : 20 Max. :2023
## (Other) :718 (Other):1102
## Przebieg Pojemność_skokowa Rodzaj_paliwa Moc
## Min. : 0 Min. : 0 Benzyna :572 Min. : 30.0
## 1st Qu.: 102020 1st Qu.:1560 Benzyna+LPG: 97 1st Qu.:110.0
## Median : 176000 Median :1896 Diesel :544 Median :136.0
## Mean : 172701 Mean :1933 Elektryczny: 3 Mean :153.9
## 3rd Qu.: 237350 3rd Qu.:1997 Hybryda : 32 3rd Qu.:174.2
## Max. :2230000 Max. :6208 Max. :612.0
##
## Typ_nadwozia Kolor Cena
## SUV :312 Czarny :301 Min. : 1999
## Kombi :243 Szary :203 1st Qu.: 19700
## Sedan :200 Srebrny :181 Median : 36900
## Kompakt :193 Biały :169 Mean : 59409
## Minivan :125 Niebieski: 86 3rd Qu.: 63346
## Auta miejskie:110 Granatowy: 54 Max. :1626016
## (Other) : 65 (Other) :254
Przyjżyjmy się teraz podstawowym statystykom opisowym poszczególnych zmiennych.
autka_Marki <- autka_dt|>
count(Marka_pojazdu) |>
data.frame()
colnames(autka_Marki)[2] <- "Liczba_aut"
#posortowane malejąco względem liczby aut
autka_Marki_sort <- autka_Marki[order(autka_Marki$Liczba_aut, decreasing=T), ]
# %
autka_Marki_sort_procent <- round((autka_Marki_sort$Liczba_aut*100)/dim(autka_dt)[1],2)
cbind(autka_Marki_sort,autka_Marki_sort_procent)|>
kable(caption = "Liczba aut poszczególnych marek samochodów (malejąco)",
col.names = c("Marka","liczba aut","% "))
| Marka | liczba aut | % | |
|---|---|---|---|
| 3 | BMW | 108 | 8.65 |
| 2 | Audi | 96 | 7.69 |
| 43 | Volvo | 85 | 6.81 |
| 42 | Volkswagen | 81 | 6.49 |
| 30 | Opel | 80 | 6.41 |
| 33 | Renault | 80 | 6.41 |
| 13 | Ford | 77 | 6.17 |
| 41 | Toyota | 64 | 5.13 |
| 26 | Mercedes-Benz | 55 | 4.41 |
| 7 | Citroën | 49 | 3.93 |
| 15 | Hyundai | 48 | 3.85 |
| 31 | Peugeot | 43 | 3.45 |
| 19 | Kia | 39 | 3.12 |
| 14 | Honda | 33 | 2.64 |
| 29 | Nissan | 32 | 2.56 |
| 36 | Skoda | 32 | 2.56 |
| 12 | Fiat | 27 | 2.16 |
| 35 | Seat | 27 | 2.16 |
| 40 | Suzuki | 26 | 2.08 |
| 25 | Mazda | 23 | 1.84 |
| 28 | Mitsubishi | 18 | 1.44 |
| 6 | Chrysler | 16 | 1.28 |
| 8 | Dacia | 14 | 1.12 |
| 27 | MINI | 14 | 1.12 |
| 1 | Alfa Romeo | 12 | 0.96 |
| 5 | Chevrolet | 12 | 0.96 |
| 18 | Jeep | 11 | 0.88 |
| 39 | Subaru | 10 | 0.80 |
| 32 | Porsche | 6 | 0.48 |
| 34 | Saab | 5 | 0.40 |
| 10 | Dodge | 3 | 0.24 |
| 16 | Infiniti | 3 | 0.24 |
| 23 | Land Rover | 3 | 0.24 |
| 24 | Lexus | 3 | 0.24 |
| 4 | Cadillac | 2 | 0.16 |
| 9 | Daihatsu | 2 | 0.16 |
| 17 | Jaguar | 2 | 0.16 |
| 22 | Lancia | 2 | 0.16 |
| 11 | Ferrari | 1 | 0.08 |
| 20 | Lada | 1 | 0.08 |
| 21 | Lamborghini | 1 | 0.08 |
| 37 | Smart | 1 | 0.08 |
| 38 | SsangYong | 1 | 0.08 |
library(plotly)
##
## Dołączanie pakietu: 'plotly'
## Następujący obiekt został zakryty z 'package:ggplot2':
##
## last_plot
## Następujący obiekt został zakryty z 'package:rio':
##
## export
## Następujący obiekt został zakryty z 'package:stats':
##
## filter
## Następujący obiekt został zakryty z 'package:graphics':
##
## layout
obiekt <- ggplot(autka_Marki, aes(x=Liczba_aut,y=Marka_pojazdu, fill=Marka_pojazdu)) +
geom_bar(stat="identity")
ggplotly(obiekt)
Najpopularniejszymi markami samochodów wystawianymi na sprzedarz w okolicach Lublina to:
BMW 8.65%
Audi 7.69%
Volvo 6.81
Analizować będziemy tylko 5 najpopularniejszych marek ( z powyższego zestawienia ). Będą to:
top10 <- head(autka_Marki_sort[,1],n=10)
autka_Model <- autka_dt[autka_dt$Marka_pojazdu==top10[1],]|>
count(Model_pojazdu) |>
data.frame()
colnames(autka_Model)[2] <- "Liczba_aut"
autka_Model_sort <- autka_Model[order(autka_Model$Liczba_aut, decreasing=T), ]
autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model$Liczba_aut),2)
cbind(autka_Model_sort,autka_Model_sort_procent)|>
kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[1],"(malejąco)",sep=" "),
col.names = c("Model","liczba aut","% "))
| Model | liczba aut | % | |
|---|---|---|---|
| 4 | Seria 3 | 29 | 26.85 |
| 6 | Seria 5 | 24 | 22.22 |
| 12 | X3 | 13 | 12.04 |
| 2 | Seria 1 | 7 | 6.48 |
| 14 | X5 | 7 | 6.48 |
| 8 | Seria 7 | 6 | 5.56 |
| 10 | X1 | 5 | 4.63 |
| 3 | Seria 2 | 3 | 2.78 |
| 13 | X4 | 3 | 2.78 |
| 5 | Seria 4 | 2 | 1.85 |
| 11 | X2 | 2 | 1.85 |
| 15 | X5 M | 2 | 1.85 |
| 16 | X6 | 2 | 1.85 |
| 1 | 3GT | 1 | 0.93 |
| 7 | Seria 6 | 1 | 0.93 |
| 9 | Seria 8 | 1 | 0.93 |
obiekt <- ggplot(autka_Model, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
ggplotly(obiekt)
autka_Model2 <- autka_dt[autka_dt$Marka_pojazdu==top10[2],]|>
count(Model_pojazdu) |>
data.frame()
colnames(autka_Model2)[2] <- "Liczba_aut"
autka_Model_sort2 <- autka_Model2[order(autka_Model2$Liczba_aut, decreasing=T), ]
autka_Model_sort_procent2 <- round((autka_Model_sort2$Liczba_aut*100)/sum(autka_Model2$Liczba_aut),2)
cbind(autka_Model_sort2,autka_Model_sort_procent2)|>
kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[2],"(malejąco)",sep=" "),
col.names = c("Model","liczba aut","% "))
| Model | liczba aut | % | |
|---|---|---|---|
| 4 | A4 | 30 | 31.25 |
| 6 | A6 | 16 | 16.67 |
| 3 | A3 | 15 | 15.62 |
| 11 | Q5 | 7 | 7.29 |
| 9 | A8 | 6 | 6.25 |
| 12 | Q7 | 6 | 6.25 |
| 5 | A5 | 4 | 4.17 |
| 10 | Q3 | 3 | 3.12 |
| 2 | A1 | 2 | 2.08 |
| 8 | A7 | 2 | 2.08 |
| 1 | 80 | 1 | 1.04 |
| 7 | A6 Allroad | 1 | 1.04 |
| 13 | Q8 | 1 | 1.04 |
| 14 | S3 | 1 | 1.04 |
| 15 | TT | 1 | 1.04 |
obiekt <- ggplot(autka_Model2, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
ggplotly(obiekt)
autka_Model3 <- autka_dt[autka_dt$Marka_pojazdu==top10[3],]|>
count(Model_pojazdu) |>
data.frame()
colnames(autka_Model3)[2] <- "Liczba_aut"
autka_Model_sort <- autka_Model3[order(autka_Model3$Liczba_aut, decreasing=T), ]
autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model3$Liczba_aut),2)
cbind(autka_Model_sort,autka_Model_sort_procent)|>
kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[3],"(malejąco)",sep=" "),
col.names = c("Model","liczba aut","% "))
| Model | liczba aut | % | |
|---|---|---|---|
| 12 | XC 60 | 18 | 21.18 |
| 7 | V50 | 13 | 15.29 |
| 6 | V40 | 11 | 12.94 |
| 3 | S60 | 9 | 10.59 |
| 8 | V60 | 7 | 8.24 |
| 14 | XC 90 | 7 | 8.24 |
| 9 | V70 | 5 | 5.88 |
| 4 | S80 | 4 | 4.71 |
| 11 | XC 40 | 4 | 4.71 |
| 1 | C30 | 2 | 2.35 |
| 2 | S40 | 2 | 2.35 |
| 5 | Seria 900 | 1 | 1.18 |
| 10 | V90 Cross Country | 1 | 1.18 |
| 13 | XC 70 | 1 | 1.18 |
obiekt <- ggplot(autka_Model3, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
obiekt|>ggplotly()
autka_Model4 <- autka_dt[autka_dt$Marka_pojazdu==top10[4],]|>
count(Model_pojazdu) |>
data.frame()
colnames(autka_Model4)[2] <- "Liczba_aut"
autka_Model_sort <- autka_Model4[order(autka_Model4$Liczba_aut, decreasing=T), ]
autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model4$Liczba_aut),2)
cbind(autka_Model_sort,autka_Model_sort_procent)|>
kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[4],"(malejąco)",sep=" "),
col.names = c("Model","liczba aut","% "))
| Model | liczba aut | % | |
|---|---|---|---|
| 9 | Passat | 22 | 27.16 |
| 4 | Golf | 19 | 23.46 |
| 14 | Tiguan | 11 | 13.58 |
| 10 | Polo | 8 | 9.88 |
| 5 | Golf Plus | 3 | 3.70 |
| 16 | Touran | 3 | 3.70 |
| 7 | Jetta | 2 | 2.47 |
| 8 | New Beetle | 2 | 2.47 |
| 12 | Sharan | 2 | 2.47 |
| 13 | T-Roc | 2 | 2.47 |
| 1 | Arteon | 1 | 1.23 |
| 2 | Crafter | 1 | 1.23 |
| 3 | Garbus | 1 | 1.23 |
| 6 | Golf Sportsvan | 1 | 1.23 |
| 11 | Scirocco | 1 | 1.23 |
| 15 | Touareg | 1 | 1.23 |
| 17 | Transporter | 1 | 1.23 |
obiekt <- ggplot(autka_Model4, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
obiekt|>ggplotly()
autka_Model5 <- autka_dt[autka_dt$Marka_pojazdu==top10[5],]|>
count(Model_pojazdu) |>
data.frame()
colnames(autka_Model5)[2] <- "Liczba_aut"
autka_Model_sort <- autka_Model5[order(autka_Model5$Liczba_aut, decreasing=T), ]
autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model5$Liczba_aut),2)
cbind(autka_Model_sort,autka_Model_sort_procent)|>
kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[5],"(malejąco)",sep=" "),
col.names = c("Model","liczba aut","% "))
| Model | liczba aut | % | |
|---|---|---|---|
| 3 | Astra | 19 | 23.75 |
| 9 | Insignia | 15 | 18.75 |
| 5 | Corsa | 12 | 15.00 |
| 10 | Meriva | 7 | 8.75 |
| 14 | Vectra | 6 | 7.50 |
| 16 | Zafira | 6 | 7.50 |
| 11 | Mokka | 5 | 6.25 |
| 6 | Crossland X | 2 | 2.50 |
| 1 | Adam | 1 | 1.25 |
| 2 | Antara | 1 | 1.25 |
| 4 | Combo | 1 | 1.25 |
| 7 | Grandland | 1 | 1.25 |
| 8 | Grandland X | 1 | 1.25 |
| 12 | Signum | 1 | 1.25 |
| 13 | Tigra | 1 | 1.25 |
| 15 | Vivaro | 1 | 1.25 |
obiekt <- ggplot(autka_Model5, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
obiekt|>ggplotly()
autka_nadwozie <- autka|>
count(Typ_nadwozia) |>
data.frame()
colnames(autka_nadwozie)[2] <- "Liczba_aut"
autka_nadwozie_sort <- autka_nadwozie[order(autka_nadwozie$Liczba_aut, decreasing=T), ]
autka_nadwozie_sort_procent <- round((autka_nadwozie_sort$Liczba_aut*100)/sum(autka_nadwozie$Liczba_aut),2)
cbind(autka_nadwozie_sort,autka_nadwozie_sort_procent)|>
kable(caption = paste("Typ nadwozia","(malejąco)",sep=" "),
col.names = c("Typ nadwozia","liczba aut","% "))
| Typ nadwozia | liczba aut | % | |
|---|---|---|---|
| 8 | SUV | 312 | 25.00 |
| 5 | Kombi | 243 | 19.47 |
| 9 | Sedan | 200 | 16.03 |
| 6 | Kompakt | 193 | 15.46 |
| 7 | Minivan | 125 | 10.02 |
| 2 | Auta miejskie | 110 | 8.81 |
| 3 | Coupe | 35 | 2.80 |
| 1 | Auta małe | 20 | 1.60 |
| 4 | Kabriolet | 10 | 0.80 |
obiekt <-ggplot(autka_nadwozie,aes(x=Liczba_aut,y=Typ_nadwozia,fill=Typ_nadwozia)) +
geom_bar(stat="identity")
obiekt|>ggplotly()
Najpopularniejszym typem nadwozia okazał się SUV.
Ludzie jeżdżą samochodami typu SUV, ponieważ są one bardziej wytrzymałe i mają lepszą przyczepność w trudnych warunkach. SUV-y mają również większą przestrzeń wewnątrz, co oznacza, że są one bardziej funkcjonalne dla rodzin i osób, które potrzebują dużej ilości miejsca do przewożenia przedmiotów. Są również bardziej wygodne i bezpieczne, ponieważ mają wyższe siedzenia i wyższy próg, co zapewnia lepszą widoczność i stabilność.
autka_paliwo <- autka|>
count(Rodzaj_paliwa) |>
data.frame()
colnames(autka_paliwo)[2] <- "Liczba_aut"
autka_paliwo_sort <- autka_paliwo[order(autka_paliwo$Liczba_aut, decreasing=T), ]
autka_paliwo_sort_procent <- round((autka_paliwo_sort$Liczba_aut*100)/sum(autka_paliwo$Liczba_aut),2)
cbind(autka_paliwo_sort,autka_paliwo_sort_procent)|>
kable(caption = paste("Rodzaj paliwa","(malejąco)",sep=" "),
col.names = c("Rodzaj paliwa","liczba aut","% "))
| Rodzaj paliwa | liczba aut | % | |
|---|---|---|---|
| 1 | Benzyna | 572 | 45.83 |
| 3 | Diesel | 544 | 43.59 |
| 2 | Benzyna+LPG | 97 | 7.77 |
| 5 | Hybryda | 32 | 2.56 |
| 4 | Elektryczny | 3 | 0.24 |
obiekt <-ggplot(autka_paliwo,aes(y=Liczba_aut,x=Rodzaj_paliwa,fill=Rodzaj_paliwa)) +
geom_bar(stat="identity")
obiekt|>ggplotly()
Widzimy, że zdecydowaną większością są samochody napędzane benzyną. Ma ona wiele zalet, w tym wyższą sprawność niż inne paliwa, a także łatwość użytkowania. Niestety, benzyna ma też swoje wady, w tym wyższe emisje spalin i krótszy czas pracy niż inne paliwa. Związane jest to z procesem spalania benzyny, który jest nieco skomplikowany i wymaga większej ilości energii, niż pozostałe paliwa.
Silniki napędzane ropą mają zazwyczaj większą moc niż te napędzane innymi paliwami. Oznacza to, że są one lepsze do jazdy po autostradzie i pozwalają uzyskać wyższą prędkość maksymalną. Dodatkowo są bardziej ekonomiczne w zużyciu paliwa, dzięki czemu użytkownicy mogą zaoszczędzić na kosztach paliwa. Ogromną zaletą jest również długa żywotność silnika, co może wpływać na ich popularność.
Gaz ziemny jest znacznie bardziej ekologiczny niż benzyna lub olej napędowy, ale jest również trudniejszy w instalacji. Od użytkownika wymaga się aby przechowywać go w bezpieczny sposób. Ponadto samochody napędzane gazem ziemnym są droższe w produkcji niż samochody napędzane tradycyjnymi paliwami, co sprawia, że producenci samochodów niechętnie sięgają po te technologie. Wadą może okazać się również przymus częstego tankowania.
Hybrydy są relatywnie nowymi pojazdami na drogach, a ich popularność
stale rośnie. Jednak jest to nadal rynek raczkujący, a producenci nadal
udoskonalają technologię, aby zapewnić kierowcom najlepsze wrażenia z
jazdy. Hybrydy są wyraźnie droższe niż tradycyjne samochody spalinowe,
dlatego wielu kierowców może się wahać przy ich zakupie. Wraz z
pojawieniem się nowszych technologii hybrydowe, które są coraz bardziej
wydajne i wygodne, oczekuje się, że ich popularność będzie dalej
rosnąć.
Dlaczego jest ich tak mało?
Wysoka cena. Hybrydy są zazwyczaj droższe od tradycyjnych samochodów spalinowych.
Trudność w utrzymaniu. Zazwyczaj są również trudniejsze w utrzymaniu niż tradycyjne samochody spalinowe, ponieważ wymagają specjalnych części i narzędzi do serwisowania.
Ograniczony zasięg. Hybrydy zazwyczaj mają ograniczony zasięg, ponieważ akumulatory szybko się wyczerpują.
Najmniej jest samochodów elektrycznych (3 modele w całym zbiorze). Samochody elektryczne są wciąż na wczesnym etapie rozwoju i ich popularność jest ograniczona. Głównymi przyczynamisą niska dostępność, wysokie koszty zakupu, ograniczone możliwości ładowania, krótki zasięg i brak infrastruktury ładowania. W wielu krajach nie ma dostatecznego poziomu inwestycji w infrastrukturę do ładowania, a samochody elektryczne są obciążone wysokimi podatkami. Wciąż brakuje odpowiednich środków pomocy publicznej na zakup samochodów elektrycznych, co ogranicza dostępność tych pojazdów. Dodatkową przyczyną małej ilości samochodów, jest to, że nasza baza składa się w większości z samochodów będących eksploatowacnych przez przynajmniej jednego właściciela.
autka_kolor <- autka|>
count(Kolor) |>
data.frame()
colnames(autka_kolor)[2] <- "Liczba_aut"
autka_kolor_sort <- autka_kolor[order(autka_kolor$Liczba_aut, decreasing=T), ]
autka_kolor_sort_procent <- round((autka_kolor_sort$Liczba_aut*100)/sum(autka_kolor$Liczba_aut),2)
cbind(autka_kolor_sort,autka_kolor_sort_procent)|>
kable(caption = paste("Kolory samochodów","(malejąco)",sep=" "),
col.names = c("Kolor","liczba aut","% "))
| Kolor | liczba aut | % | |
|---|---|---|---|
| 6 | Czarny | 301 | 24.12 |
| 14 | Szary | 203 | 16.27 |
| 13 | Srebrny | 181 | 14.50 |
| 2 | Biały | 169 | 13.54 |
| 11 | Niebieski | 86 | 6.89 |
| 9 | Granatowy | 54 | 4.33 |
| 10 | Inny kolor | 52 | 4.17 |
| 7 | Czerwony | 51 | 4.09 |
| 4 | Brązowy | 38 | 3.04 |
| 15 | Zielony | 25 | 2.00 |
| 1 | Beżowy | 22 | 1.76 |
| 16 | Złoty | 22 | 1.76 |
| 3 | Bordowy | 19 | 1.52 |
| 5 | Błękitny | 8 | 0.64 |
| 12 | Pomarańczowy | 7 | 0.56 |
| 17 | Żółty | 7 | 0.56 |
| 8 | Fioletowy | 3 | 0.24 |
obiekt <-ggplot(autka_kolor,aes(x=Liczba_aut,y=Kolor,fill=Kolor)) +
geom_bar(stat="identity", fill=c("beige", "white","darkred",
"brown","lightblue","black",
"red","purple","darkblue",
"#00A693","blue", "orange",
"aliceblue","grey","green",
"gold","yellow"),
colour="black")
obiekt|>ggplotly()
Kolor samuchodu wybierany przez kupującego jest wyborem subiektywnym. Jednakże pojawiają się pewne przesłanki sługerujące, dlaczego pewne kolory są wybierane częściej od pozostałych:
Czarny kolor samochodu osobowego jest zazwyczaj wybierany ze względu na jego wszechstronność i uniwersalność. Jest on jednym z najbardziej popularnych kolorów samochodów osobowych, ponieważ łatwo dopasowuje się do innych kolorów, wygląda elegancko i jest łatwy w czyszczeniu. Ponadto uważany jest za symbol luksusu i statusu.
Popularność koloru szarego związana jest z uniwersalnością. Nie jest ani zbyt jasny ani zbyt ciemny, dzięki czemu pasuje do wielu stylów wystroju wnętrz. Jest również znacznie łatwiejszy do utrzymania w czystości niż inne jasne kolory. Dodatkowo, może on pomóc w zmniejszeniu temperatury wewnątrz kabiny, dzięki czemu pojazd jest bardziej komfortowy.
Srebrny podobnie jak kolor szary jest popularny ze względu na uniwersalność. Jest również łatwy w utrzymaniu, ponieważ nie ma potrzeby częstego polerowania i zabezpieczania.
Samochody w kolorze białym są łatwiejsze w utrzymaniu w czystości. Ponadto, biały kolor samochodu może pomóc w nadawaniu mu nowoczesnego wyglądu, który może zwiększyć jego wartość. Biały odcień jest również popularny ze względu na jego uniwersalny wygląd, który może pasować do każdego rodzaju otoczenia.
Zastanówmy się jeszcze, dlaczego kolory takie jak pomarańczowy czy filetowy są tak mało popularne? Oto kilka sugestii.
Fioletowe samochody są zazwyczaj wytwarzane z tańszych materiałów, co prowadzi do niższej jakości. Są również bardziej podatne na awarie i korozję, co oznacza większe koszty utrzymania. Ponadto, w porównaniu do nowych samochodów, mają mniej opcji i technologii, które są dostępne w nowych samochodach, przez co są mało atrakcyjne dla kupujących.
Pomarańczowy kolor samochodu jest zwykle uważany za zbyt odważny, zazwyczaj ludzie wolą kupować bardziej tradycyjne kolory, takie jak srebrny, czarny lub biały. Pomarańczowy samochód może wiązać się z trudnościami w utrzymaniu estetycznej czystości, ponieważ łatwo się brudzi i trudniej go wyczyścić.
autka_liczbowe <- autka_dt[,c(4,5,6,8,11)]
liczbowe <- apply(autka_liczbowe,2,summary)
liczbowe <- rbind(liczbowe,St.dev=apply(autka_liczbowe,2,sd))
rownames(liczbowe) <- c('minimum','kwantyl dolny','mediana','średnia','kwantyl górny','maksimum','odchylenie standardowe')
as.data.frame(liczbowe) |>
kable(caption="Statystyki parametrów typu liczbowego",
digits = 0)
| Rok_produkcji | Przebieg | Pojemność_skokowa | Moc | Cena | |
|---|---|---|---|---|---|
| minimum | 1961 | 0 | 0 | 30 | 1999 |
| kwantyl dolny | 2007 | 102020 | 1560 | 110 | 19700 |
| mediana | 2012 | 176000 | 1896 | 136 | 36900 |
| średnia | 2011 | 172701 | 1933 | 154 | 59409 |
| kwantyl górny | 2016 | 237350 | 1997 | 174 | 63346 |
| maksimum | 2023 | 2230000 | 6208 | 612 | 1626016 |
| odchylenie standardowe | 6 | 114166 | 728 | 74 | 90907 |
as.data.frame(liczbowe[,1]) |>
kable(caption="Rok produkcji",
digits = 0,
col.names = "Rok produkcji")
| Rok produkcji | |
|---|---|
| minimum | 1961 |
| kwantyl dolny | 2007 |
| mediana | 2012 |
| średnia | 2011 |
| kwantyl górny | 2016 |
| maksimum | 2023 |
| odchylenie standardowe | 6 |
hist (autka_liczbowe[,1],
col=c("red", "green"),
xlab="Rok produkcji",
ylab="Częstotliwość",
las =2,
main="Histogram Roku Produkcji aut")
boxplot(autka_dt$Rok_produkcji)
Widzimy, że 50% samochodów zostało wyprodukowanych w latach 2007-2016. Warością środkową są samochody z 2012 roku.
autka[autka$Rok_produkcji==1961,] |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1171 | 1171 | Fiat | Inny | 1961 | 79 600 km | 1 295 cm3 | Benzyna | 65 KM | Sedan | Niebieski | 25900 |
Najstarszym samochodem okazał się nr. 1171. Samochód został
wyprodukowany 61 lat temu! Na podstawie histogramu wiemy, że naprawdę
jest to rzadkie zjawisko. Wiemy, że samochod jest marki “FIAT”, niestety
sprzedający nie podał konkretnego modelu auta. Wiemy jedynie, że jest
marki FIAT. Po przeszukaniu informacji w internecie (link),
udało się znaleźć informacje, że firma Fiat w 1961 roku produkowała
tylko i wyłącznie poniższe samochody: Dodatkowo wiemy,
że typ nadwozia to sedan, a więc zwężamy zbiór możliwości do:
Analizując
poszczególne modele, okazuje się że moc silnika naszego auta w
porównaniu ze specyfikacjami modeli 1100 oraz 1300 jest za duża,
natomiast model 1800/2100 według danych ze strony powinien mieć większą
pojemność skokową silnika. Tak więc prawdopodobnie samochód z naszej
bazy to właśnie Fiat 1500. Dane z bazy pokrywają się z podaną
specyfikacją pojazdu.
Aby auto zostało uznane za zabytek, musi spełnić kilka wytycznych, tj.:
ma przynajmniej 30 lat,
jest modelem wycofanym z produkcji przynajmniej 15 lat temu,
jest zbudowane przynajmniej w 75 proc. z oryginalnych części (jeżeli nie spełnia tego warunku, zostanie uznany za replikę oryginalnego modelu).
Wprawdzie zdarza się, że konserwator może wpisać do rejestru samochód, który nie ma 30 lat, ale tylko pod pewnymi warunkami. Jest to możliwe, jeżeli jest to nietypowa konstrukcja. To samo dotyczy szczególnego pochodzenia zastosowanych technologii i rozwiązań. Dlatego, jeżeli masz wyjątkowy pojazd, zwłaszcza należący w przeszłości do ważnej osobowości lub kogoś, kto osiągnął sukces sportowy itp., również możesz zarejestrować go jako samochód zabytkowy.
Sprawdźmy więc, ile samochodów z bazy spełnia pierwszy warunek (produkcja przed 1992 rokiem):
dim(autka[autka$Rok_produkcji[]<=1992,])
## [1] 10 11
autka[autka$Rok_produkcji[]<=1992,] |>
kable( row.names = NA)
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 377 | 377 | Mercedes-Benz | SL | 1986 | 145 000 km | 4 973 cm3 | Benzyna | 326 KM | Kabriolet | Beżowy | 86000 |
| 390 | 390 | Citroën | CX | 1981 | 1 230 000 km | 2 499 cm3 | Benzyna | 137 KM | Sedan | Szary | 9999 |
| 899 | 899 | Ferrari | Testarossa | 1992 | 23 374 km | 4 943 cm3 | Benzyna | 428 KM | Coupe | Czerwony | 1050000 |
| 905 | 905 | Ford | Sierra | 1991 | 110 919 km | 1 998 cm3 | Benzyna | 120 KM | Sedan | Czerwony | 16900 |
| 913 | 913 | BMW | Seria 7 | 1985 | 211 000 km | 2 788 cm3 | Benzyna | 183 KM | Sedan | Zielony | 35000 |
| 938 | 938 | Volvo | Seria 900 | 1992 | 149 500 km | 1 986 cm3 | Benzyna | 190 KM | Sedan | Czarny | 36900 |
| 992 | 992 | Chevrolet | Impala | 1974 | 60 000 km | 5 736 cm3 | Benzyna | 167 KM | Sedan | Niebieski | 64000 |
| 1165 | 1165 | Volkswagen | Garbus | 1985 | 10 000 km | 1 300 cm3 | Benzyna | 30 KM | Kabriolet | Inny kolor | 5500 |
| 1170 | 1170 | Toyota | Tercel | 1979 | 81 804 km | 1 279 cm3 | Benzyna | 65 KM | Auta miejskie | Inny kolor | 15900 |
| 1171 | 1171 | Fiat | Inny | 1961 | 79 600 km | 1 295 cm3 | Benzyna | 65 KM | Sedan | Niebieski | 25900 |
10 samochodów z bazy spełnia pierwszy warunek, aby mogły być uznane za auta zabytkowe.
Średni rok produkcji oraz mediana mają podobne wartości (2011/2012), oznacza to, że średnio oraz najcześciej sprzedawane są 10 letnie samochody.
Kwantyl dolny (2007) oraz górny (2016) infurmują, że 25% wszystkich samochodów została wyprodukowana przed 2007 rokiem, oraz 25% zostało wyprodokowanych po 2016 roku.
Dziwić może maksimum badanego parametru wynoszące 2023. (Dane pochodzą z października 2022)
autka[autka$Rok_produkcji[]==2023,] |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 613 | 613 | Dacia | Duster | 2023 | 9 km | 999 cm3 | Benzyna+LPG | 100 KM | SUV | Zielony | 86550 |
Dostrzegamy również, że samochód ma już przejechane 9 kilometrów. (czyżby był z przyszłości !? ). Całe to zamieszanie jest spowodowane tym, że salony samochodowe nie przypisują samochodom im dokładnej daty produkcji, a tak naprawdę datę modelową, stąd na koniec każdego roku w salonach dostępna jest opcja kupna samochodu, którego rocznik jest z roku następnego. Jeżeli kupującego interesuje od kiedy samochód jest w użytku, najdokłądniejszą informacje uzyska dzięki wyczytaniu z dowodu rejestracyjnego datę pierwszej rejestracji.
Porównanie roku produkcji poszczególnych marek
autka_dt|>
group_by(Marka_pojazdu) |>
summarise(minimim=min(Rok_produkcji),
średnia=mean(Rok_produkcji),
mediana=median(Rok_produkcji),
maksimum=max(Rok_produkcji)) |>
kable(caption = "Statystyki roku produkcji dla poszczególnych marek ")
| Marka_pojazdu | minimim | średnia | mediana | maksimum |
|---|---|---|---|---|
| Alfa Romeo | 2008 | 2017.333 | 2019.0 | 2022 |
| Audi | 1993 | 2009.781 | 2009.5 | 2022 |
| BMW | 1985 | 2011.398 | 2012.0 | 2022 |
| Cadillac | 2004 | 2006.000 | 2006.0 | 2008 |
| Chevrolet | 1974 | 2006.250 | 2009.0 | 2013 |
| Chrysler | 2004 | 2013.188 | 2014.5 | 2019 |
| Citroën | 1981 | 2011.245 | 2011.0 | 2022 |
| Dacia | 2006 | 2017.500 | 2018.0 | 2023 |
| Daihatsu | 2005 | 2007.500 | 2007.5 | 2010 |
| Dodge | 2013 | 2015.000 | 2015.0 | 2017 |
| Ferrari | 1992 | 1992.000 | 1992.0 | 1992 |
| Fiat | 1961 | 2008.037 | 2008.0 | 2020 |
| Ford | 1991 | 2012.364 | 2012.0 | 2021 |
| Honda | 1998 | 2008.758 | 2008.0 | 2020 |
| Hyundai | 2007 | 2014.917 | 2014.5 | 2022 |
| Infiniti | 2011 | 2014.000 | 2015.0 | 2016 |
| Jaguar | 2014 | 2016.000 | 2016.0 | 2018 |
| Jeep | 1993 | 2007.455 | 2008.0 | 2018 |
| Kia | 2006 | 2015.308 | 2016.0 | 2022 |
| Lada | 1997 | 1997.000 | 1997.0 | 1997 |
| Lamborghini | 2005 | 2005.000 | 2005.0 | 2005 |
| Lancia | 2008 | 2011.000 | 2011.0 | 2014 |
| Land Rover | 1997 | 2001.000 | 1999.0 | 2007 |
| Lexus | 2000 | 2008.333 | 2008.0 | 2017 |
| Mazda | 2001 | 2011.565 | 2012.0 | 2020 |
| Mercedes-Benz | 1986 | 2009.164 | 2009.0 | 2022 |
| MINI | 2002 | 2011.929 | 2011.5 | 2022 |
| Mitsubishi | 2005 | 2010.889 | 2011.5 | 2017 |
| Nissan | 2000 | 2011.000 | 2011.0 | 2018 |
| Opel | 1998 | 2010.987 | 2011.0 | 2022 |
| Peugeot | 2004 | 2011.953 | 2011.0 | 2022 |
| Porsche | 2014 | 2017.833 | 2017.0 | 2022 |
| Renault | 1998 | 2011.925 | 2013.0 | 2022 |
| Saab | 1999 | 2004.800 | 2006.0 | 2008 |
| Seat | 2000 | 2010.185 | 2009.0 | 2020 |
| Skoda | 2001 | 2014.688 | 2016.0 | 2022 |
| Smart | 2016 | 2016.000 | 2016.0 | 2016 |
| SsangYong | 2017 | 2017.000 | 2017.0 | 2017 |
| Subaru | 2003 | 2010.200 | 2008.5 | 2019 |
| Suzuki | 1999 | 2010.269 | 2007.5 | 2022 |
| Toyota | 1979 | 2011.844 | 2012.5 | 2022 |
| Volkswagen | 1985 | 2010.469 | 2011.0 | 2022 |
| Volvo | 1992 | 2011.800 | 2012.0 | 2022 |
as.data.frame(liczbowe[,2]) |>
kable(caption="Przebieg",
col.names = "Przebieg")
| Przebieg | |
|---|---|
| minimum | 0.0 |
| kwantyl dolny | 102019.5 |
| mediana | 176000.0 |
| średnia | 172701.2 |
| kwantyl górny | 237350.0 |
| maksimum | 2230000.0 |
| odchylenie standardowe | 114165.8 |
hist (autka_liczbowe[,2],
col=c("red", "green"),
xlab="Przebieg",
ylab="Częstotliwość",
las =2,
main="Histogram Przebiegu",
breaks = 20)
boxplot(autka_liczbowe[,2])
Na samym początku uwagę przykuwa znacząco odbiegające od wszystkich obserwacji maksimum
autka[autka$Przebieg=="2 230 000 km",] |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 430 | 430 | Hyundai | Tucson | 2008 | 2 230 000 km | 1 975 cm3 | Benzyna | 141 KM | SUV | Czarny | 18900 |
(2230000/14)/365
## [1] 436.3992
14 letni samochód prejechał 2 230 000 km. Oznacza to, że średnio jeździł po 93 tys. km w ciągu roku oraz 436.3992172 km na dzień. Jako ciekawostka można dodać, że aby okrążyć ziemię wazdłuż równika, trzeba przejechać około 40 075 km. Nasz samochód mógłby okrążyć ziemię około 56 razy. Jako kolejna ciekawostka dla zwizualizowania jak wielka jest to odległość dodajmy, że odległość z Ziemi na Księżyc wynisi 384 400 km.
Wydaje się to dosyć nierealne i prawdopodobnie sprzedający omyłkowo wpisał o jedno “0” za dużo przy wystawianiu ogłoszenia.
Sprawdzmy srednia samochodów z 2008 roku bez naszej wartości odstającej:
przebieg <- autka_liczbowe[,2]
przebieg <- przebieg[-430]
przebieg[430]
## [1] 320000
median(przebieg)
## [1] 176000
mean(przebieg)
## [1] 171051.4
max(przebieg)
## [1] 1230000
Widzimy, że średnia oraz mediana wynoszą około 173 tys. Przyjmijmy więc opcję, że sprzedający się pomylił i podał dzeisięciokrotność przebiegu auta.
Na wykresie ramka wąsy widzimy jeszcze jedną obserwacje odstającą. Przyjżyjmy się jej dokładniej:
autka[autka$Przebieg=="1 230 000 km",] |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 390 | 390 | Citroën | CX | 1981 | 1 230 000 km | 2 499 cm3 | Benzyna | 137 KM | Sedan | Szary | 9999 |
W tym przypadku widzimy jednak, że jest to auto 41 letnie, więc średnio jeździło 30 tys km rocznie. Wydaje się to prawdopodobne, dlatego zostawiamy tak jak jest. Zmieniamy tylko i wyłącznie samochód o identyfikatorze 430.
#przebieg to kolumna 5
autka_dt[430,5] <- 223000
autka_liczbowe <- autka_dt[,c(4,5,6,8,11)]
liczbowe <- apply(autka_liczbowe,2,summary)
liczbowe <- rbind(liczbowe,St.dev=apply(autka_liczbowe,2,sd))
rownames(liczbowe) <- c('minimum','kwantyl dolny','mediana','średnia','kwantyl górny','maksimum','odchylenie standardowe')
Wyświetlmy więc statystyki ponownie dla zmionionej obserwacji 430.
as.data.frame(liczbowe[,2]) |>
kable(caption="Przebieg",
col.names = "Przebieg")
| Przebieg | |
|---|---|
| minimum | 0.0 |
| kwantyl dolny | 102019.5 |
| mediana | 176000.0 |
| średnia | 171093.0 |
| kwantyl górny | 237293.2 |
| maksimum | 1230000.0 |
| odchylenie standardowe | 98179.1 |
hist (autka_liczbowe[,2],
col=c("red", "green"),
xlab="Przebieg",
ylab="Częstotliwość",
las =2,
main="Histogram Przebiegu")
boxplot(autka_dt$Przebieg)
Wartośćią środkową jest 176 tys. przejechanych km. Średnio samochody wystawione na sprzedarz przejechały 171 tys kilometrów. 25% samochodów ma przebieg mniejszy niż 102 tys. kilometrów oraz 25% samochodów ma przebieg większy niż 237 tys. kilometrów.
Spróbujmy teraz oszacować, jaki przebieg powinien mieć samochód, zależnie od “wieku”.
autka_dt|>
group_by(Rok_produkcji) |>
summarise(minimim=min(Przebieg),
średnia=mean(Przebieg),
mediana=median(Przebieg),
maksimum=max(Przebieg)) |>
kable(caption = "Statystyki przebiegu zależne od roku produckji")
| Rok_produkcji | minimim | średnia | mediana | maksimum |
|---|---|---|---|---|
| 1961 | 79600 | 79600.000 | 79600.0 | 79600 |
| 1974 | 60000 | 60000.000 | 60000.0 | 60000 |
| 1979 | 81804 | 81804.000 | 81804.0 | 81804 |
| 1981 | 1230000 | 1230000.000 | 1230000.0 | 1230000 |
| 1985 | 10000 | 110500.000 | 110500.0 | 211000 |
| 1986 | 145000 | 145000.000 | 145000.0 | 145000 |
| 1991 | 110919 | 110919.000 | 110919.0 | 110919 |
| 1992 | 23374 | 86437.000 | 86437.0 | 149500 |
| 1993 | 240000 | 390625.000 | 435000.0 | 452500 |
| 1994 | 158287 | 158287.000 | 158287.0 | 158287 |
| 1995 | 282000 | 282000.000 | 282000.0 | 282000 |
| 1997 | 190000 | 283433.429 | 285000.0 | 356100 |
| 1998 | 139000 | 235307.143 | 249250.0 | 346900 |
| 1999 | 131226 | 240360.091 | 240154.0 | 334000 |
| 2000 | 133000 | 314045.286 | 318509.0 | 456696 |
| 2001 | 111403 | 269955.417 | 257381.0 | 431000 |
| 2002 | 48745 | 238826.421 | 239985.0 | 424590 |
| 2003 | 77000 | 235796.800 | 234072.0 | 520000 |
| 2004 | 84481 | 237040.825 | 247550.0 | 369400 |
| 2005 | 46950 | 239112.667 | 241000.0 | 435000 |
| 2006 | 66423 | 219111.250 | 216816.0 | 400000 |
| 2007 | 98000 | 237766.260 | 226445.0 | 430000 |
| 2008 | 81000 | 229085.388 | 226000.0 | 379562 |
| 2009 | 95800 | 222805.662 | 224000.0 | 485000 |
| 2010 | 47166 | 210377.514 | 207750.0 | 470000 |
| 2011 | 84500 | 204057.301 | 209000.0 | 305000 |
| 2012 | 26326 | 186180.606 | 190000.0 | 371893 |
| 2013 | 25029 | 171900.600 | 177000.0 | 305000 |
| 2014 | 34745 | 170427.642 | 175000.0 | 330000 |
| 2015 | 33000 | 148359.035 | 142250.0 | 327000 |
| 2016 | 28800 | 118211.819 | 121968.5 | 195000 |
| 2017 | 14489 | 105866.171 | 96500.0 | 293000 |
| 2018 | 12962 | 86597.622 | 81808.0 | 184000 |
| 2019 | 11575 | 74254.833 | 55763.0 | 175000 |
| 2020 | 10600 | 42594.320 | 34000.0 | 220000 |
| 2021 | 924 | 16575.500 | 16750.0 | 41215 |
| 2022 | 0 | 2449.318 | 5.0 | 29000 |
| 2023 | 9 | 9.000 | 9.0 | 9 |
Aby było to praktyczne, dodajmy warunek, że szukamy aut do użytku, ale nienowego, czyli bierzmy pod uwagę auta z roczników 2002-2020 (młodsze niż 20 lat ale starsze niż dwuletnie).
#auta z roczników 2002-2020
autka_dt2 <- autka_dt[autka_dt$Rok_produkcji<=2020 &autka_dt$Rok_produkcji>=2002,]
autka_dt2[,"Rok_produkcji"] <- 2022-autka_dt2[,"Rok_produkcji"]
colnames(autka_dt2)[4] <- "Wiek"
autka_dt2|>
group_by(Wiek) |>
summarise(średnia=mean(Przebieg),
mediana=median(Przebieg),
odchylenie_standardowe=sd(Przebieg))|>
kable(caption = "Statystyki przebiegu zależne od wieku samochodu",
digits = 0,
align="c")
| Wiek | średnia | mediana | odchylenie_standardowe |
|---|---|---|---|
| 2 | 42594 | 34000 | 42606 |
| 3 | 74255 | 55763 | 45284 |
| 4 | 86598 | 81808 | 44610 |
| 5 | 105866 | 96500 | 56227 |
| 6 | 118212 | 121968 | 43320 |
| 7 | 148359 | 142250 | 70773 |
| 8 | 170428 | 175000 | 60167 |
| 9 | 171901 | 177000 | 56217 |
| 10 | 186181 | 190000 | 65797 |
| 11 | 204057 | 209000 | 52528 |
| 12 | 210378 | 207750 | 66153 |
| 13 | 222806 | 224000 | 67686 |
| 14 | 229085 | 226000 | 58672 |
| 15 | 237766 | 226445 | 68998 |
| 16 | 219111 | 216816 | 67373 |
| 17 | 239113 | 241000 | 64953 |
| 18 | 237041 | 247550 | 65047 |
| 19 | 235797 | 234072 | 86916 |
| 20 | 238826 | 239985 | 79513 |
Przy pomocy tego oszacowania kupujący auto może zorientować się, jaki przebieg powienien mieć samochód w zależności od wieku. Zdarzają się niestety niegodziwcy, którzy “cofają” wskaźnik licznika aby sztucznie zwiększyć wartość auta. Dzięki powyższemu zestawieniu kupującemu łatwiej jest wykryć oszustwo.
Zbudujmy dodatkowo model liniowy zależności przebieku od wieku auta:
library(stats)
hist(autka_dt2$Przebieg)
md_przebieg <- lm(Przebieg~Wiek,autka_dt2)
summary(md_przebieg)
##
## Call:
## lm(formula = Przebieg ~ Wiek, data = autka_dt2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -236967 -41700 -3018 37635 278635
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 59005.8 4614.9 12.79 <2e-16 ***
## Wiek 11335.3 399.2 28.39 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 62860 on 1103 degrees of freedom
## Multiple R-squared: 0.4223, Adjusted R-squared: 0.4217
## F-statistic: 806.2 on 1 and 1103 DF, p-value: < 2.2e-16
library(lmtest)
## Ładowanie wymaganego pakietu: zoo
##
## Dołączanie pakietu: 'zoo'
## Następujące obiekty zostały zakryte z 'package:base':
##
## as.Date, as.Date.numeric
plot(md_przebieg)
lmtest::raintest(md_przebieg)
##
## Rainbow test
##
## data: md_przebieg
## Rain = 0.92444, df1 = 553, df2 = 550, p-value = 0.8218
cor.test(autka_dt2$Przebieg,autka_dt2$Wiek)
##
## Pearson's product-moment correlation
##
## data: autka_dt2$Przebieg and autka_dt2$Wiek
## t = 28.394, df = 1103, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6143971 0.6826379
## sample estimates:
## cor
## 0.6498251
ggplot(aes(y=Przebieg,x=Wiek),data=autka_dt2)+
geom_point()+
geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
Wniosek: Na podstawie modelu możęmy wnioskować, że w ciągu jednego roku samochód przejeżdża średnio 11 tys. km +/- 400km. Jednakże powyższe zestawienie oraz wykres dopasowania wskazują, że błąd jest zaniżony. Duża zmienność przebiegu uniemożliwia nam dokładniejsze oszacowania.
Dodatkowo patrząc na wartości odchyleń standardowych z tabeli dla poszczególnego wieku wyciągamy kolejne wnioski:
Odchylenie standardowe młodszych aut ( wiek:1-6 )waha się na poziomie 4000.
Ciekawa zależność pojawia się dla starszych samochodów. Występuje tu pewien “przeskok” i wartość oschylenia standardowego starszych roczników zaczyna oscylować wokół 6000.
Oczywiście jest to tylko wskazówka, a nie dowód.
Na postawie analizy przebiegu kupujący ma przesłanki do tego, aby zapyać sprzedającego o szczegóły auta, które mogą wpływać na przebieg. np. cel użytku samochodu przez byłego właściciela.
as.data.frame(liczbowe[,3]) |>
kable(caption="Pojemność skokowa",
digits = 0,
col.names = "Pojemność skokowa")
| Pojemność skokowa | |
|---|---|
| minimum | 0 |
| kwantyl dolny | 1560 |
| mediana | 1896 |
| średnia | 1933 |
| kwantyl górny | 1997 |
| maksimum | 6208 |
| odchylenie standardowe | 728 |
hist (autka_liczbowe[,3],
col=c("red", "green"),
xlab="moc",
ylab="Częstotliwość",
las =2,
main="Histogram Pojemności skokowej aut")
boxplot(autka_dt$Pojemność_skokowa)
Statystyki mogą być nieco zaburzone ze względu na ustawione przez nas wartości zerowe w przypadku samochodów elektrycznych. Podczas analizowania pojemności skokowej, rozważmy więc wyłącznie samochody, które nimi nie są.
autka_dt3 <- autka_dt[-c(585,1000,1001),]
#liczbowe2 - bez elektrycznych
autka_liczbowe2 <- autka_dt3[,c(4,5,6,8,11)]
liczbowe2 <- apply(autka_liczbowe2,2,summary)
liczbowe2 <- rbind(liczbowe2,St.dev=apply(autka_liczbowe2,2,sd))
rownames(liczbowe2) <- c('minimum','kwantyl dolny','mediana','średnia','kwantyl górny','maksimum','odchylenie standardowe')
as.data.frame(liczbowe2[,3]) |>
kable(caption="Pojemność skokowa",
digits = 0,
col.names = "Pojemność skokowa")
| Pojemność skokowa | |
|---|---|
| minimum | 875 |
| kwantyl dolny | 1560 |
| mediana | 1896 |
| średnia | 1938 |
| kwantyl górny | 1997 |
| maksimum | 6208 |
| odchylenie standardowe | 723 |
hist (autka_liczbowe2[,3],
col=c("red", "green"),
xlab="Pojemność skokowa",
ylab="Częstotliwość",
las =2,
main="Histogram Roku Produkcji aut")
boxplot(autka_dt3$Pojemność_skokowa)
Największa pojemność skokowa silnika wynosi: 6208. Owy silnik posiada poniższy samochód:
autka_dt[autka_dt$Pojemność_skokowa==max(autka_dt$Pojemność_skokowa),]
## id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1201 1201 Mercedes-Benz Klasa C 2013 75543 6208
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 1201 Benzyna 507 Sedan Biały 365853
Natomiast najmniejszy to: 875.
autka_dt3[autka_dt3$Pojemność_skokowa==min(autka_dt3$Pojemność_skokowa),]
## id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 790 790 Fiat 500 2015 33583 875
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 790 Benzyna 86 Kompakt Czarny 35000
Średnio samochody mają pojemność 1.9.
Silnik 1,9 o pojemności (TDI) jest powszechnie uznawany za jeden z najlepszych, ponieważ jest wyjątkowo ekonomiczny, ma wysoką wydajność i moc, a jednocześnie cechuje go niski poziom emisji spalin. To wszystko sprawia, że jest bardzo popularny wśród kierowców, którzy korzystają z niego do samochodów osobowych i dostawczych. Dzięki swojej pojemności skokowej silnik 1,9 oferuje wystarczającą moc i wydajność w zakresie zużycia paliwa i emisji spalin. Dodatkowo jest on bardzo trwały i niezawodny, a jego konserwacja jest prosta i niedroga.
Podobnie jak w poprzednim przypadku, samochody elektryczne nie będą brane pod uwagę w analizie.
as.data.frame(liczbowe2[,4]) |>
kable(caption="Moc silnika",
digits = 0,
col.names = "Moc silnika")
| Moc silnika | |
|---|---|
| minimum | 30 |
| kwantyl dolny | 110 |
| mediana | 136 |
| średnia | 153 |
| kwantyl górny | 174 |
| maksimum | 612 |
| odchylenie standardowe | 73 |
hist (autka_liczbowe2[,4],
col=c("red", "green"),
xlab="Moc silnika",
ylab="Częstotliwość",
las =2,
main="Histogram Mocy silnika")
boxplot(autka_dt3$Moc)
Samochód z najwyższą mocą:
autka_dt3[autka_dt3$Moc==max(autka_dt3$Moc),]
## id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 900 900 Mercedes-Benz CL 2004 84481 5980
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 900 Benzyna 612 Coupe Czarny 2e+05
Samochód z najniższą mocą:
autka_dt3[autka_dt3$Moc==min(autka_dt3$Moc),]
## id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1165 1165 Volkswagen Garbus 1985 10000 1300
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 1165 Benzyna 30 Kabriolet Inny kolor 5500
Średnia moc: 153KM.
as.data.frame(liczbowe[,5]) |>
kable(caption="Cena auts",
digits = 0,
col.names = "Cena auta")
| Cena auta | |
|---|---|
| minimum | 1999 |
| kwantyl dolny | 19700 |
| mediana | 36900 |
| średnia | 59409 |
| kwantyl górny | 63346 |
| maksimum | 1626016 |
| odchylenie standardowe | 90907 |
hist (autka_liczbowe[,5],
col=c("red", "green"),
xlab="Cena",
ylab="Częstotliwość",
las =2,
main="Histogram Ceny aut",
breaks = 50)
boxplot(autka_dt$Cena)
Na podstawie histogramu widzimy , że rozkład Ceny ma rozkład o prawostronnej asymetrii. Większość wyników oscyluje w okolicach 37 tys. zł.
Zestawienie najdroższych samochodów:
#najwiekszy
autka_dt4 <-autka_dt[autka_dt$Cena>=500000,]
#sortowanie po cenie auta
autka_dt4 <- autka_dt4[ order(autka_dt4$Cena, decreasing=T), ]
autka_dt4 |>
kable()
| id | Marka_pojazdu | Model_pojazdu | Rok_produkcji | Przebieg | Pojemność_skokowa | Rodzaj_paliwa | Moc | Typ_nadwozia | Kolor | Cena | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1024 | 1024 | Lamborghini | Murcielago | 2005 | 46950 | 6193 | Benzyna | 580 | Coupe | Biały | 1626016 |
| 851 | 851 | Porsche | 911 | 2022 | 405 | 3996 | Benzyna | 510 | Coupe | Czarny | 1097560 |
| 899 | 899 | Ferrari | Testarossa | 1992 | 23374 | 4943 | Benzyna | 428 | Coupe | Czerwony | 1050000 |
| 1001 | 1001 | Mercedes-Benz | EQS | 2022 | 0 | 0 | Elektryczny | 523 | Kompakt | Czarny | 783564 |
| 1224 | 1224 | BMW | Seria 8 | 2021 | 15000 | 4395 | Benzyna | 530 | Coupe | Szary | 579900 |
| 1004 | 1004 | Audi | A8 | 2022 | 5 | 2967 | Diesel | 286 | Sedan | Czarny | 533856 |
| 340 | 340 | Porsche | 718 Cayman | 2021 | 27700 | 3995 | Benzyna | 400 | Coupe | Żółty | 532000 |
Najtańszy samochód:
autka_dt[autka_dt$Cena==min(autka_dt$Cena),]
## id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 159 159 Honda Civic 1998 289000 1396
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 159 Benzyna 75 Kompakt Granatowy 1999
Do dalszego przetwarzania danych i ewlauacji modelu można wyrzucić kolumnę z indeksami krotek
autka_dt <- subset(autka_dt,select = -1)
head(autka_dt)
## Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1 Volkswagen Polo 2008 181000 1390
## 2 Kia Ceed 2008 179000 1582
## 3 Toyota Land Cruiser 2022 2000 2755
## 4 Fiat 500X 2015 89024 1368
## 5 Toyota Prius 2009 289820 1798
## 6 Ford S-Max 2007 345000 1753
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 1 Benzyna 80 Auta miejskie Czarny 15999
## 2 Diesel 115 Kombi Szary 13500
## 3 Diesel 204 SUV Beżowy 287000
## 4 Benzyna 140 Auta miejskie Inny kolor 62730
## 5 Hybryda 99 Kompakt Szary 40500
## 6 Diesel 125 Minivan Srebrny 17600
Na wcześniejszym etapie przetwarzania zbioru nadano odpowiednim cechom typy wartości numeryczne i kategoryczne.
str(autka_dt)
## 'data.frame': 1248 obs. of 10 variables:
## $ Marka_pojazdu : Factor w/ 43 levels "Alfa Romeo","Audi",..: 42 19 41 12 41 13 2 3 43 33 ...
## $ Model_pojazdu : Factor w/ 326 levels "107","159","2",..: 214 74 178 20 215 234 223 250 295 71 ...
## $ Rok_produkcji : int 2008 2008 2022 2015 2009 2007 2014 2017 2008 2015 ...
## $ Przebieg : num 181000 179000 2000 89024 289820 ...
## $ Pojemność_skokowa: num 1390 1582 2755 1368 1798 ...
## $ Rodzaj_paliwa : Factor w/ 5 levels "Benzyna","Benzyna+LPG",..: 1 3 3 1 5 3 1 3 3 1 ...
## $ Moc : num 80 115 204 140 99 125 272 190 110 90 ...
## $ Typ_nadwozia : Factor w/ 9 levels "Auta małe","Auta miejskie",..: 2 5 9 2 6 7 9 8 5 9 ...
## $ Kolor : Factor w/ 17 levels "Beżowy","Biały",..: 6 14 1 10 14 13 13 9 10 7 ...
## $ Cena : num 15999 13500 287000 62730 40500 ...
head(autka_dt)
## Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1 Volkswagen Polo 2008 181000 1390
## 2 Kia Ceed 2008 179000 1582
## 3 Toyota Land Cruiser 2022 2000 2755
## 4 Fiat 500X 2015 89024 1368
## 5 Toyota Prius 2009 289820 1798
## 6 Ford S-Max 2007 345000 1753
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 1 Benzyna 80 Auta miejskie Czarny 15999
## 2 Diesel 115 Kombi Szary 13500
## 3 Diesel 204 SUV Beżowy 287000
## 4 Benzyna 140 Auta miejskie Inny kolor 62730
## 5 Hybryda 99 Kompakt Szary 40500
## 6 Diesel 125 Minivan Srebrny 17600
Zgodnie z przyjętym standardem usuwamy ze zbioru w poszczególnych kolumnach wartości, które nie znajdują się między pierwszym a trzecim kwantylem (Q1 -1.5IQR, Q3+1.5IQR)
Przytnij_kwartyl <- function(nazwa_kolumny,dataset)
{
IQR_n <- IQR(autka_dt[[nazwa_kolumny]])
TOP <- quantile(autka_dt[[nazwa_kolumny]])[[4]] + 1.5*IQR_n
BOTTOM <- quantile(autka_dt[[nazwa_kolumny]])[[2]] - 1.5*IQR_n
print(TOP)
autka_dt <- autka_dt[(autka_dt[[nazwa_kolumny]] > BOTTOM),]
autka_dt <- autka_dt[(autka_dt[[nazwa_kolumny]] < TOP),]
# autka_dt_MM <- autka_dt_MM[(autka_dt_MM[[nazwa_kolumny]] > BOTTOM),]
# autka_dt_MM <- autka_dt_MM[(autka_dt_MM[[nazwa_kolumny]] < TOP),]
boxplot(autka_dt[[nazwa_kolumny]])
# boxplot(autka_dt_MM[[nazwa_kolumny]])
}
Przytnij_kwartyl("Rok_produkcji")
## [1] 2029.5
Przytnij_kwartyl("Przebieg")
## [1] 440203.9
Przytnij_kwartyl("Pojemność_skokowa")
## [1] 2652.5
Przytnij_kwartyl("Moc")
## [1] 270.625
Przytnij_kwartyl("Cena")
## [1] 128816.2
ggcorrplot(cor(autka_liczbowe2), lab=TRUE, p.mat = cor_pmat(autka_liczbowe2))
Nie powinna dziwić wysoka korelacja między mocą silnika a pojemnością skokową. Może ona jednak być niekorzystna w dalszym przetwarzaniu. Dlatego zbudujemy dwa modele, w których wykorzystamy zbiór danych bez jednej z tych cech.
head(autka_dt)
## Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1 Volkswagen Polo 2008 181000 1390
## 2 Kia Ceed 2008 179000 1582
## 3 Toyota Land Cruiser 2022 2000 2755
## 4 Fiat 500X 2015 89024 1368
## 5 Toyota Prius 2009 289820 1798
## 6 Ford S-Max 2007 345000 1753
## Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
## 1 Benzyna 80 Auta miejskie Czarny 15999
## 2 Diesel 115 Kombi Szary 13500
## 3 Diesel 204 SUV Beżowy 287000
## 4 Benzyna 140 Auta miejskie Inny kolor 62730
## 5 Hybryda 99 Kompakt Szary 40500
## 6 Diesel 125 Minivan Srebrny 17600
autka_dt_no_eng_capacity <- subset(autka_dt,select = -5)
(head(autka_dt_no_eng_capacity))
## Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Rodzaj_paliwa Moc
## 1 Volkswagen Polo 2008 181000 Benzyna 80
## 2 Kia Ceed 2008 179000 Diesel 115
## 3 Toyota Land Cruiser 2022 2000 Diesel 204
## 4 Fiat 500X 2015 89024 Benzyna 140
## 5 Toyota Prius 2009 289820 Hybryda 99
## 6 Ford S-Max 2007 345000 Diesel 125
## Typ_nadwozia Kolor Cena
## 1 Auta miejskie Czarny 15999
## 2 Kombi Szary 13500
## 3 SUV Beżowy 287000
## 4 Auta miejskie Inny kolor 62730
## 5 Kompakt Szary 40500
## 6 Minivan Srebrny 17600
# autka_dt_MM_no_eng_capacity <- subset(autka_dt_MM,select = -3)
autka_dt_no_power <- subset(autka_dt,select = -7)
(head(autka_dt_no_power))
## Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1 Volkswagen Polo 2008 181000 1390
## 2 Kia Ceed 2008 179000 1582
## 3 Toyota Land Cruiser 2022 2000 2755
## 4 Fiat 500X 2015 89024 1368
## 5 Toyota Prius 2009 289820 1798
## 6 Ford S-Max 2007 345000 1753
## Rodzaj_paliwa Typ_nadwozia Kolor Cena
## 1 Benzyna Auta miejskie Czarny 15999
## 2 Diesel Kombi Szary 13500
## 3 Diesel SUV Beżowy 287000
## 4 Benzyna Auta miejskie Inny kolor 62730
## 5 Hybryda Kompakt Szary 40500
## 6 Diesel Minivan Srebrny 17600
# autka_dt_MM_no_power <- subset(autka_dt_MM,select = -4)
# autka_dt_MM_no_power
Zbiór danych dzielimy na zbiór treningowy i testowy w proporcjach 80%:20%
set.seed(2024)
Model regresyjny po mocy silnika.
Pomimo dużego zbioru danych, liczba różnych modeli samochodów może spowodować, że w zbiorze testowym znajdą się modele, które nie pojawiły się z zbiorze uczącym. Aby zapobiec takim problemom do podziełu zbioru posłuży nam losowanie warstwowe.
library(caret)
## Ładowanie wymaganego pakietu: lattice
##
## Dołączanie pakietu: 'caret'
## Następujący obiekt został zakryty z 'package:purrr':
##
## lift
indexes_train <- createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8, list = FALSE)
## Warning in createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8,
## : Some classes have a single record ( 107, 159, 2, 2008, 2104, 300C, 300s, 301,
## 3GT, 500X, 626, 718 Boxster, 718 Cayman, 80, 911, A6 Allroad, Adam, Altea XL,
## AMG GT, Antara, Arteon, Ateca, BLS, C-MAX, C1, C4 Cactus, C6, C8, Camry,
## Cayenne, Challenger, Charger, City, CL, CLA, Colt, Combo, Compass, Crafter,
## CTS, CX, CX-3, DS5, EcoSport, Elantra, EQC, EQS, Escape, Expert, F150, Forfour,
## FX, Garbus, GL, Golf Sportsvan, Grand Espace, Grandis, Grandland, Grandland X,
## HR-V, i10, i30 N, Impala, Inny, IS, Journey, Kamiq, Kangoo, Korando, Liana,
## Liberty, Linea, Logan, LX, Magentis, Matrix, Mito, Modus, Murcielago, Navara,
## Niro, NX, ONE, Partner, Patrol, Prius+, Pro_cee'd, ProAce, Punto, Punto 2012,
## Q8, Qubo, Range Rover Sport, RAPID, Rifter, S3, Santa Fe, Scala, Scirocco,
## Scudo, Seria 6, Seria 8, Seria 900, Seria B, Sierra, Signum, Sirion, SLK,
## Sonata, Sorento, Space Star, Tercel, Terios, Testarossa, Tigra, Toledo,
## Touareg, Tourneo Courier, Transit, Transporter, Trax, Tribeca, TT, V90 Cross
## Country, Vito, Vivaro, W124 (1984-1993), Wrangler, XC 70, XCeed, XE, XF, XL7,
## Zoe ) and these will be selected for the sample
Train_1 <- autka_dt_no_eng_capacity[indexes_train,]
Test_1 <- autka_dt_no_eng_capacity[-indexes_train,]
nrow(Test_1)
## [1] 135
Regresja1 <- glm(Cena ~ ., data=Train_1)
#summary(Regresja1)
# predictions <- predict(Regresja1, newdata = Test_1)
#Model regresyjny po mocy silnika z jednolitą nazwą modelu auta
# indexes_train <- sample(1:nrow(autka_dt_MM_no_eng_capacity), size= nrow(autka_dt_MM_no_eng_capacity)*0.8)
#
# Train_2 <- autka_dt_MM_no_eng_capacity[indexes_train,]
# Test_2 <- autka_dt_MM_no_eng_capacity[-indexes_train,]
# nrow(Test_2)
Model regresyjny po pojemności skokowej
indexes_train <- createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8, list = FALSE)
## Warning in createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8,
## : Some classes have a single record ( 107, 159, 2, 2008, 2104, 300C, 300s, 301,
## 3GT, 500X, 626, 718 Boxster, 718 Cayman, 80, 911, A6 Allroad, Adam, Altea XL,
## AMG GT, Antara, Arteon, Ateca, BLS, C-MAX, C1, C4 Cactus, C6, C8, Camry,
## Cayenne, Challenger, Charger, City, CL, CLA, Colt, Combo, Compass, Crafter,
## CTS, CX, CX-3, DS5, EcoSport, Elantra, EQC, EQS, Escape, Expert, F150, Forfour,
## FX, Garbus, GL, Golf Sportsvan, Grand Espace, Grandis, Grandland, Grandland X,
## HR-V, i10, i30 N, Impala, Inny, IS, Journey, Kamiq, Kangoo, Korando, Liana,
## Liberty, Linea, Logan, LX, Magentis, Matrix, Mito, Modus, Murcielago, Navara,
## Niro, NX, ONE, Partner, Patrol, Prius+, Pro_cee'd, ProAce, Punto, Punto 2012,
## Q8, Qubo, Range Rover Sport, RAPID, Rifter, S3, Santa Fe, Scala, Scirocco,
## Scudo, Seria 6, Seria 8, Seria 900, Seria B, Sierra, Signum, Sirion, SLK,
## Sonata, Sorento, Space Star, Tercel, Terios, Testarossa, Tigra, Toledo,
## Touareg, Tourneo Courier, Transit, Transporter, Trax, Tribeca, TT, V90 Cross
## Country, Vito, Vivaro, W124 (1984-1993), Wrangler, XC 70, XCeed, XE, XF, XL7,
## Zoe ) and these will be selected for the sample
Train_2 <- autka_dt_no_power[indexes_train,]
Test_2 <- autka_dt_no_power[-indexes_train,]
nrow(Test_2)
## [1] 135
Regresja2 <- glm(Cena ~ ., data=Train_2)
#summary(Regresja3)
library("caret")
RMSE(predict(Regresja1, newdata=Test_1), Test_1$Cena)
## [1] 31460.85
RMSE(predict(Regresja2, newdata=Test_2), Test_2$Cena)
## [1] 29124.5
# RMSE(predict(Regresja3, newdata=Test_3), Test_3$Cena)
# RMSE(predict(Regresja4, newdata=Test_4), Test_4$Cena)
Duże błędy modelu mogą być spowodowane ograniczonymi danymi. W
sytuacji sprzedaży samochodu na portalu takim jak otomoto.pl, w
zdecydowanej większości mamy doczynienia z samochodami używanymi.
Na podstawie posiadanych przez nas danych ciężko jest określić, czy
samochód jaki chcielibyśmy kupić jest sprawny czy wymaga dodatkowych
nakładów pracy oraz kosztów.
Problematyczne okazać się mogą stostunkowo młode samochody, które są
powypadkowe. Naprawa takich aut często przekracza ich cenę na
portalu.
Ostatecznie spróbujmy wycenić dwa typowe auta o poniższych parametrach:
Marka: BMW
Model: Seria 3
Rok Produkcji: 2007
Przebieg: 220 000
Pojemność_skokowa: 2.0
Rodzaj paliwa: Benzyna
Moc: 174
Typ nadwozia: kombi
Kolor: czarny
Marka: Opel
Model: Astra
Rok Produkcji: 2010
Przebieg: 170 000
Pojemność_skokowa: 1600
Rodzaj paliwa: Diesel
Moc: 117
Typ nadwozia: sedan
Kolor: biały
new_data <- data.frame(
Marka_pojazdu = c("BMW", "Opel"),
Model_pojazdu = c("Seria 3", "Astra"),
Rok_produkcji = c(2007,2010),
Przebieg = c(220000, 170000),
Pojemność_skokowa = c(2000, 1600),
Rodzaj_paliwa = c("Benzyna", "Diesel"),
# Moc_silnika = c(174, 160),
Typ_nadwozia = c("Kombi", "Sedan"),
Kolor = c("Czarny", "Biały"),
Cena = c(0, 0)
)
predictions <- predict(Regresja2, newdata = new_data)
print(predictions)
## 1 2
## 19966.97 31909.10Tak więc BMW zostało wycenione na 19966.97 zł, natomiast Opel na 31909,10 zł.